﻿#define _CRT_SECURE_NO_WARNINGS	

#include<stdio.h>
#include<stdlib.h>

//fgetc函数的案例演示
//假设我现在有个文件test.txt，文件里的内容为abcdefg。现在，我想把文件里的字符通过屏幕打印出来
//int main()
//{
//	char ch = 0;
//	//打开文件
//	FILE* pf = fopen("test.txt","r");
//
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	while ((ch = fgetc(pf))!= EOF)
//	{
//		printf("%c",ch);
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//fputc函数的案例演示
//假设我有一个空的文本文件test1.txt，现在我要求往文件里面写入abcdefg。

//int main()
//{
//	char arr[] = "abcdefg";
//	//打开文件
//	FILE* pf = fopen("test1.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	for (int i = 0; i < sizeof(arr) - 1; i++)
//	{
//		fputc(arr[i],pf);
//	}
//	
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}



//fgets函数的演示案例
//假设我现在有个文件test.txt，文件里的内容为abcdefg。现在，我想把文件里的字符通过屏幕打印出来
//int main()
//{
//	char ch[100] = {0};
//	//打开文件
//	FILE* pf = fopen("test.txt","r");
//
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	if (fgets(ch, 0, pf) != NULL)
//	{
//		for (int i = 0; i < 8; i++)
//		{
//			printf("%c", ch[i]);
//		}
//	}
//
//	else
//	{
//		int tmp = ferror(pf);
//		printf("%d\n",tmp);
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//fputs函数的案例演示
//假设我有一个空的文本文件test1.txt，现在我要求往文件里面写入abcdefgh。

//int main()
//{
//	char arr[] = "abcdefgh";
//	//打开文件
//	FILE* pf = fopen("test1.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	printf("%d\n", fputs(arr, pf));
//	
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//fscanf的案例示范
//通过读取格式化文件中的内容到程序中,文件内容为学生成绩的信息。

//#define SIZE 20
//
//typedef struct Stu
//{
//	char name[SIZE];
//	int age;
//	float score;
//}Student;
//
//void print_struct(Student* temp)
//{
//	printf("%s %d %.2f",temp->name,temp->age,temp->score);
//}
//
//int main()
//{
//	Student stu = { 0 };
//	//打开文件
//	FILE* pf = fopen("test2.txt","r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//		exit(EXIT_FAILURE);
//	}
//
//	//读文件
//	fscanf(pf,"%s %d %f",stu.name,&stu.age,&stu.score);
//	print_struct(&stu);
//	fscanf(pf, "%s %d %f", stu.name, &stu.age, &stu.score);
//	print_struct(&stu);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//fprintf的实例演示
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test3.txt","w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	fprintf(pf,"%s","今天有没有好好睡觉啊？");
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}



//int main()
//{
//
//	//打开文件
//	FILE* pf = fopen("test4.txt","w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//写文件
//	for (int i = 0; i < 26; i++)
//	{
//		fputc('a'+i,pf);
//	}
//	
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//fseek函数的实例演示
//现在我有一个文件test4.txt，内容为26个英文字母。现在我只想读取从字母m之后的所有字母，并打印到屏幕上。

/*int main()
{
	char ch = 0;
	int count = 0;

	FILE* pf = fopen("test4.txt","r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	
	while (ch = fgetc(pf))
	{
		if (ch == 'm')
		{
			break;
		}
		count++;
	}

	fseek(pf,count,SEEK_SET);

	while ((ch = fgetc(pf)) != EOF)
	{
		fprintf(stdout,"%c",ch);
	}

	fclose(pf);
	pf = NULL;

	return 0;
}*/



//ftell函数的使用

//int main()
//{
//	char ch = 0;
//
//	FILE* fp = fopen("test4.txt","r");
//
//	if (fp== NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	ch = fgetc(fp);
//
//	printf("%d\n", ftell(fp));
//
//	ch = fgetc(fp);
//
//	printf("%d\n", ftell(fp));
//	fclose(fp);
//	fp = NULL;
//
//	return 0;
//	
//}

////rewind函数
//int main()
//{
//	char ch = 0;
//
//	FILE* fp = fopen("test4.txt","r");
//
//	if (fp== NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	ch = fgetc(fp);
//	printf("%c\n",ch);
//	printf("%d\n", ftell(fp));
//
//	rewind(fp);
//	ch = fgetc(fp);
//	printf("%c\n", ch);
//
//	printf("%d\n", ftell(fp));
//
//	fclose(fp);
//	fp = NULL;
//
//	return 0;
//}



//int main()
//{
//	char ch = 0;
//	int i = 0;
//	FILE* pf = fopen("test4.txt","r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//错误使用feof函数
//	while (!feof(pf))
//	{
//		ch = fgetc(pf);
//		printf("%c",ch);
//	}
//
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}



#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int c; // 注意：int，⾮char，要求处理EOF
	FILE* fp = fopen("test.txt", "r");
	if (!fp) {
		perror("File opening failed");
		return EXIT_FAILURE;
	}

	//fgetc 当读取失败的时候或者遇到⽂件结束的时候，都会返回EOF
	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
	{
		putchar(c);
	}

	printf("\n");

	//判断是什么原因结束的
	if (ferror(fp))
		puts("I/O error when reading");
	else if (feof(fp))
		puts("End of file reached successfully");
	fclose(fp);
}






